#include <iostream>
#include <memory>

using namespace std;

shared_ptr<int> clone(int);

int main()
{
    shared_ptr<double> p1;                  // shared_ptr 可以指向一个 double
    shared_ptr<int> p2(new int(42));        // p2 指向一个值为 42 的 int

    // shared_ptr<int> p1 = new int(1024);     // 错误：必须使用直接初始化形式
    shared_ptr<int> p2(new int(1024));      // 正确：使用了直接初始化形式

    shared_ptr<int> p = clone(1);
    cout << *p << endl;
}

// shared_ptr<int> clone(int p) {
//     return new int(p); // 错误：隐式转换为 shared_ptr<int>
// }

shared_ptr<int> clone(int p) {
    // 正确：显式地用 int* 创建 shared_ptr<int>
    return shared_ptr<int>(new int(p));
}